package br.com.toscano.contpedido.view.servlet;

import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.toscano.contpedido.domain.Pedido;
import br.com.toscano.contpedido.domain.PedidoProduto;
import br.com.toscano.contpedido.util.Util;
import br.com.toscano.contpedido.view.filter.ConfiguracaoFilter;

public class ExibePedidoServlet  extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Pedido pedido = (Pedido)request.getSession().getAttribute("pedido");
		Long idPedido = null;
		if (request.getParameter("idPedido") != null) 
			idPedido = new Long (request.getParameter("idPedido"));

		List<Pedido> pedidos = (List<Pedido>)request.getSession().getAttribute("pedidos");
		if (pedido == null ) {
			if (pedidos != null) {
				for(Pedido p : pedidos) {
					if (p.getId().equals(idPedido)){
						pedido = p;
						break;
					}
				}
			}
		}
		
		response.setContentType("text/html;UTF-8");
		
		StringBuilder sb = new StringBuilder();
		sb.append("<html>");
		sb.append("	<head><title>Pedido - " + ((pedido != null) ? pedido.getId(): "") +  "</title></head>");
		sb.append("	<Body>");
		
		sb.append("		<table  border='0' width='800'>");
		for (int i = 0; i < ConfiguracaoFilter.RELATORIOS_REPETICOES_QUANTIDADE; i++) {
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' >");
			gerarPedido(request, pedido, sb);
			sb.append("				</td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "'>&nbsp;</td>");
			sb.append("			</tr>");
		}	
		sb.append("		</table>");
		
		sb.append("		<BR>");
		ExibeRecebimentoServlet.adicionarImprimir(sb);

		sb.append("</Body>");
		sb.append("</html>");
		
		OutputStream output = response.getOutputStream();
		
		output.write(sb.toString().getBytes());
		
		output.flush();
		
		output.close();
	}

	private void gerarPedido(HttpServletRequest request, Pedido pedido,
			StringBuilder sb) {
		sb.append("		<table  border='0' width='600' height='40'>");
		sb.append("			<tr >");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "'  valign='top'>");
		sb.append("					<table  border='0' width='100%' height='100%'>");
		sb.append("						<tr>");
		sb.append("							<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' valign='top'>");
		sb.append("								<img width='"+ConfiguracaoFilter.LOGO_WIGHT +"' height='"+ConfiguracaoFilter.LOGO_HEIGTH+"' border='0' src='" + Util.getUrlBase(request)+"/images/"+ConfiguracaoFilter.LOGO +"'>");
		sb.append("							</td");
		sb.append("						</tr>");
		sb.append("						<tr>");
		sb.append("						</tr>");
		sb.append("					</table>");
		sb.append("				</td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center' valign='top' ><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_TITULO+"' > <font >" +ConfiguracaoFilter.NOME_PADARIA_RELATORIO + "</font>"
				+ "				<br><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_DADOS_CLIENTE +"'><font >" +ConfiguracaoFilter.NOME_PADARIA_RUA + "</font> "
				+ "				<br><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_DADOS_CLIENTE+"'><font >" +ConfiguracaoFilter.NOME_PADARIA_CNPJ + "</font> "
				+ "				<br><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_DADOS_CLIENTE+"'><font >" +ConfiguracaoFilter.NOME_PADARIA_FONE + "</font> "
				+ "				<br><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_DADOS_CLIENTE+"'><font >" +ConfiguracaoFilter.NOME_PADARIA_EMAIL + "</font> "
				+ "				<br><br><br><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_SUB_TITULO+"'><font  >Fornecimento de Mercadoria</font> "
				+ "				<br></td>");
		sb.append("			</tr>");
		sb.append("			<tr>");
		sb.append("							<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='150'>&nbsp;</td>");
		sb.append("							<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='150'><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_DATA+"'  ><strong>Nº Pedido: </strong></font><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_SUB_TITULO+"'  > " + pedido.getId() +"</font>&nbsp;&nbsp;&nbsp;<strong> <font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_DATA +"'  > " + Util.dateToString(new Date()) +"</strong></font></td>");
		sb.append("			</tr>");
		sb.append("		</table>");

		if (pedido != null) {
			
			BigDecimal valorTotalOriginal = BigDecimal.ZERO;
			BigDecimal valorTotalCobrado = BigDecimal.ZERO;
			for (PedidoProduto pp : pedido.getListaPedidoProduto()) {
				BigDecimal multiplicacao = pp.getProduto().getValor().setScale(2,BigDecimal.ROUND_UP).multiply(pp.getQuantidade().setScale(2,BigDecimal.ROUND_UP)).setScale(2,BigDecimal.ROUND_UP); 
				valorTotalOriginal = valorTotalOriginal.add(multiplicacao);

				valorTotalCobrado = valorTotalCobrado.add(pp.getValorTotalItem());
			};
			
			sb.append("		<table border='0' width='600' cellspacing='0' cellpadding='0'>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Cliente</strong>: " + pedido.getCliente().getNome() +"</font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Responsável</strong>: " + pedido.getCliente().getResponsavel() +"</font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' ><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Data Cadastro</strong>: " + Util.dateToString(pedido.getDataCadastro())+"</font></td>");
			String hora = pedido.getHora() + "";
			if (hora.length() == 1) hora = "0"+hora; 
			String minuto = pedido.getMinuto() + "";
			if (minuto.length() == 1) minuto = "0"+minuto; 
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' ><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Data Entrega</strong>: " + Util.dateToString(pedido.getDataEntrega())+ " - " + hora + ":" + minuto + "</font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' ><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Endereo</strong>: " + pedido.getCliente().getEndereco()  +  ", Bairro " + pedido.getCliente().getBairro() + " -  " + pedido.getCliente().getCidade() + " - " + pedido.getCliente().getEstado() + " </font></td>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' ><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Complemento</strong>: " + pedido.getCliente().getComplemento() +"</font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' ><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Referência</strong>: " + pedido.getCliente().getReferencia() +"</font></td>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' ><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Fone</strong>: " + pedido.getCliente().getFone() +"</font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' ><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Fone 2 </strong>: " + pedido.getCliente().getFone2() +"</font></td>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' ><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Fone 3 </strong>: " + pedido.getCliente().getFone3() +"</font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Valor</strong>: " + Util.formataValorParaString(pedido.getValorTotalPedido().setScale(2,BigDecimal.ROUND_UP),2) +"</font></td>");
			sb.append("			</tr>");
			if (!valorTotalOriginal.equals(valorTotalCobrado)) {
				sb.append("			<tr>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Desconto</strong>: " + Util.formataValorParaString(valorTotalOriginal.subtract(valorTotalCobrado).setScale(2,BigDecimal.ROUND_UP),2) +"</font></td>");
				sb.append("			</tr>");
			}
			if (pedido.getObservacao() != null && !"".equals(pedido.getObservacao())) {
				sb.append("			<tr>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Observaçãoo</strong>: " + pedido.getObservacao() + "</font></td>");
				sb.append("			</tr>");
			}

			sb.append("		</table>");
			sb.append("		<BR>");

			sb.append("		<font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Produtos:</strong></font>");
			sb.append("		<table border='1' cellspacing='0' cellpadding='1'  width='600' height='40'>");
			sb.append("			<tr bgcolor='AAAAAA'>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"' ><strong>Descrição</strong></font></td>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"' ><strong>Valor Unitario</strong></font></td>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"' ><strong>Quantidade</strong></font></td>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"' ><strong>Valor Item</strong></font></td>");
			sb.append("			</tr>");

			for (PedidoProduto pp : pedido.getListaPedidoProduto()) {
				sb.append("			<tr>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "'> <font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"' >"+ pp.getProduto().getDescricao()+"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"' >"+ Util.formataValorParaString(pp.getValorUnitario(),2) +"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"' >"+ Util.formataValorParaString(pp.getQuantidade(),2)+"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"' >"+ Util.formataValorParaString(pp.getValorTotalItem(),2)+"</font></td>");
				sb.append("			</tr>");
			}
			sb.append("		</table>");
		}

		sb.append("		<BR>");
		ExibeRecebimentoServlet.adicionarResponsavel(sb, true);
	}
}